package 爆刷leetcode.balabala.接雨水;

/**
 * @Author yaya
 * @Create 2024/5/28 19:38
 * Description:
 */
public class Solution {

    public static void main(String[] args) {
        trap(new int[]{0,1,0,2,1,0,1,3,2,1,2,1});
    }
    public static int trap(int[] height) {
        // 初始化左右指针
        int left = 0;
        int right = height.length - 1;
        // 初始化左右最大高度
        int left_max = 0;
        int right_max = 0;
        // 初始化雨水量
        int water = 0;

        // 当左指针小于右指针时，执行循环
        while (left < right) {
            // 如果左边高度小于右边高度
            if (height[left] < height[right]) {
                // 更新左边最大高度
                if (height[left] >= left_max) {
                    left_max = height[left];
                } else {
                    // 计算当前位置上的雨水量并累加
                    water += left_max - height[left];
                }
                // 移动左指针
                left++;
            } else {
                // 如果右边高度小于等于左边高度
                // 更新右边最大高度
                if (height[right] >= right_max) {
                    right_max = height[right];
                } else {
                    // 计算当前位置上的雨水量并累加
                    water += right_max - height[right];
                }
                // 移动右指针
                right--;
            }
        }

        // 返回总的雨水量
        return water;
    }
}